#include "homepagewidget.h"
#include "ui_homepagewidget.h"

#include <QVBoxLayout>
#include "util.h"


HomePageWidget::HomePageWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::HomePageWidget)
{
    ui->setupUi(this);

    initKindsAndTags();

    initRefreshAndTopBtn();
}

HomePageWidget::~HomePageWidget()
{
    delete ui;
}

void HomePageWidget::initKindsAndTags()
{
    //分类
    QList<QString> kinds = {"历史", "美食", "游戏", "科技", "运动", "动物", "旅行", "电影"};

    //创建分类标签
    QPushButton* kindBtn=buildSelectBtn(ui->classifys,"#3ECEFF","分类");
    ui->classifyHLayout->addWidget(kindBtn);

    //创建具体的分类按钮
    for(auto& kind : kinds)
    {
        QPushButton* kindItemBtn=buildSelectBtn(ui->classifys,"#222222",kind);
        ui->classifyHLayout->addWidget(kindItemBtn);

        //给分类按钮绑定槽函数
        connect(kindItemBtn,&QPushButton::clicked,this,[=]{
            onKindBtnClicked(kindItemBtn);
        });
    }

    ui->classifyHLayout->setSpacing(8);

    // 分类和该分类下所有标签映射
    tags = {
        {"历史", {"中国史", "世界史", "历史人物", "艺术", "文化", "奇闻"}},
        {"美食", {"美食测评", "美食制作", "美食攻略", "美食记录", "探店", "水果", "海鲜"}},
        {"游戏", {"游戏攻略", "单机游戏", "电子竞技", "手机游戏", "网络游戏", "游戏赛事","桌游棋牌"}},
        {"科技", {"数码", "软件应用", "智能家居", "手机", "电脑", "人工智能", "基础设 施"}},
        {"运动", {"篮球", "足球", "乒乓球", "羽毛球", "健身", "竞技体育", "运动装备"}},
        {"动物", {"喵星人", "汪星人", "宠物知识", "动物资讯", "野生动物", "动物世界", "萌宠"}},
        {"旅行", {"旅游攻略", "旅行Vlog", "自驾游", "交通", "环球旅行", "露营", "野外生存"}},
        {"电影", {"电影解说", "电影推荐", "电影剪辑", "搞笑", "吐槽", "悬疑", "经典"}}};

    //创建分类下的所有标签，默认情况下创建的第0个分类下的标签
    resetTags(tags[kinds[0]]);
}

QPushButton* HomePageWidget::buildSelectBtn(QWidget *parent, const QString &color, const QString &text)
{
    QPushButton* btn=new QPushButton(text,parent);
    btn->setStyleSheet("color:"+color);
    btn->setMinimumHeight(12);

    //5：文本到按钮边界的距离
    btn->setFixedHeight(text.size()*12);
    return btn;
}

void HomePageWidget::resetTags(const QList<QString> &tags)
{
    //创建标签的说明
    QPushButton* tag=buildSelectBtn(ui->labels,"#3ECEFF","标签");
    ui->labelHLayout->addWidget(tag);

    //创建具体的每个标签
    for(auto& tagText :tags)
    {
        QPushButton* tagItem=buildSelectBtn(ui->labels,"#666666",tagText);
        ui->labelHLayout->addWidget(tagItem);

        //绑定槽函数
        connect(tagItem,&QPushButton::clicked,this,[=]{
            onTagBtnClicked(tagItem);
        });
    }

    ui->labelHLayout->setSpacing(8);
}

void HomePageWidget::initRefreshAndTopBtn()
{
    //创建Widget
    QWidget* refreshTopWidget=new QWidget(this);
    refreshTopWidget->setFixedSize(30,70);
    refreshTopWidget->setStyleSheet("QPushButton{"
                                    "border-radius : 15px;"
                                    "border : none;"
                                    "background-color:#DDDDDD;}"
                                    "QPushButton:hover{background-color:#666666;}");
    QVBoxLayout* layout=new QVBoxLayout(refreshTopWidget);

    //创建按钮
    QPushButton* topBtn=new QPushButton(refreshTopWidget);
    topBtn->setFixedSize(30,30);
    topBtn->setStyleSheet("border-image:url(:/Image/homePage/zhiding.png);");
    layout->addWidget(topBtn);

    QPushButton* refreshBtn=new QPushButton(refreshTopWidget);
    refreshBtn->setFixedSize(30,30);
    refreshBtn->setStyleSheet("border-image:url(:/Image/homePage/shuaxin.png);");
    layout->addWidget(refreshBtn);

    layout->setContentsMargins(0,0,0,0);
    layout->setSpacing(10);

    refreshTopWidget->move(800,500);

    //绑定槽函数
    connect(topBtn,&QPushButton::clicked,this,&HomePageWidget::onTopBtnClicked);
    connect(refreshBtn,&QPushButton::clicked,this,&HomePageWidget::onRefreshBtnClicked);
}

void HomePageWidget::onKindBtnClicked(QPushButton *clickedKindBtn)
{
    //设置当前被点击分类按钮的高亮显示
    clickedKindBtn->setStyleSheet("background-color:#F1FDFF;"
                               "color: #3ECEFF;");

    //清除之前点击过的分类按钮上的高亮显示
    //获取所有的分类按钮--即获取classifys中所有类型为QPushButton*的孩子
    //因为所有分类按钮的父元素都是ui->classifys
    QList<QPushButton*> kindBtns=ui->classifys->findChildren<QPushButton*>();
    for(auto& kindBtn : kindBtns)
    {
        if(kindBtn!=clickedKindBtn)
        {
            kindBtn->setStyleSheet("color: #222222;");
        }
    }

    //先删除分类布局器中的之前分类按钮中的所有标签
    QList<QPushButton*> tagBtns=ui->labels->findChildren<QPushButton*>();
    for(auto& tagBtn : tagBtns)
    {
        ui->labelHLayout->removeWidget(tagBtn);
        delete tagBtn;
    }

    //重新添加当前点击分类按钮对应的所有标签
    resetTags(tags[clickedKindBtn->text()]);
}

void HomePageWidget::onTagBtnClicked(QPushButton *clickedTagBtn)
{
    //将被点击的标签按钮设置为高亮显示
    clickedTagBtn->setStyleSheet("background-color: #F1FDFF;"
                           "color: #3ECEFF;");

    //获取当前分类下的所有标签，并清除之前点击过的标签上的高亮显示
    QList<QPushButton*> tagBtns=ui->labels->findChildren<QPushButton*>();
    for(auto& tagBtn : tagBtns)
    {
        if(tagBtn!=clickedTagBtn)
        {
            tagBtn->setStyleSheet("color: #666666");
        }
    }
}

void HomePageWidget::onTopBtnClicked()
{
    LOG()<<"置顶按钮点击";
}

void HomePageWidget::onRefreshBtnClicked()
{
    LOG()<<"刷新按钮点击";
}
